/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package rn;

import controladores.IngresoMaterialJpaController;
import controladores.LoteIngresoMaterialJpaController;
import controladores.MaterialJpaController;
import controladores.MaterialJpaControllerExt;
import controladores.SubTipoMaterialJpaController;
import controladores.TipoMaterialJpaController;
import controladores.UnidadMedidaJpaController;
import controladores.exceptions.NonexistentEntityException;
import entidades.IngresoMaterial;
import entidades.LoteIngresoMaterial;
import entidades.Material;
import entidades.SubTipoMaterial;
import entidades.TipoMaterial;
import entidades.UnidadMedida;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author g
 */
public class MaterialRN {

    private static EntityManagerFactory factory = Persistence.createEntityManagerFactory("Hormicat-SistemaIntegralPU");
    private static MaterialJpaController materialJpaController = new MaterialJpaController(factory);
    private static TipoMaterialJpaController tipoMaterialJpaController = new TipoMaterialJpaController(factory);
    private static SubTipoMaterialJpaController subTipoMaterialJpaController = new SubTipoMaterialJpaController(factory);
    private static UnidadMedidaJpaController unidadMedidaJpaController = new UnidadMedidaJpaController(factory);
    private static IngresoMaterialJpaController ingresoMaterialJpaController = new IngresoMaterialJpaController(factory);
    private static LoteIngresoMaterialJpaController loteIngresoMaterialJpaController = new LoteIngresoMaterialJpaController(factory);
    //Metodos de Controlador Extras
    private static MaterialJpaControllerExt materialJpaControllerExt = new MaterialJpaControllerExt(factory);
    

    //Material
    public static void create(Material material) {
        materialJpaController.create(material);
    }

    public static void modificar(Material material) {
        try {
            materialJpaController.edit(material);
        } catch (Exception ex) {
            Logger.getLogger(MaterialRN.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public static void eliminarMaterial(Long id){
        try {
            materialJpaController.destroy(id);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(MaterialRN.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static List<Material> getTodosMateriales() {
        return materialJpaController.findMaterialEntities();
    }

    public static Material getMaterialXId(Long id) {
        return materialJpaController.findMaterial(id);
    }
    
    public static List<Material> getMaterialesPor(String valor, String parametro) {
        return materialJpaControllerExt.getMaterialesPor(valor, parametro);
    }
    
    public static List<Material> getMaterialesLike(String value, int parametro) {
        return materialJpaControllerExt.getMaterialesLike(value, parametro);
    }
    
    public static boolean yaExiste(String value, int parametro, Long id_excepcion){
        return materialJpaControllerExt.yaExiste(value, parametro, id_excepcion);
    }

    //TipoMaterial
    public static void create(TipoMaterial tipoMaterial) {
        tipoMaterialJpaController.create(tipoMaterial);
    }

    public static void modificar(TipoMaterial tipoMaterial) {
        try {
            tipoMaterialJpaController.edit(tipoMaterial);
        } catch (Exception ex) {
            Logger.getLogger(MaterialRN.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static List<TipoMaterial> getTodosTipoMateriales() {
        return tipoMaterialJpaController.findTipoMaterialEntities();
    }

    public static TipoMaterial getTipoMaterialXId(Long id) {
        return tipoMaterialJpaController.findTipoMaterial(id);
    }
    
    public static boolean yaExisteTipoMaterial(String value, Long id_excepcion){
        return materialJpaControllerExt.yaExisteTipoMaterial(value, id_excepcion);
    }

    //SubTipoMaterial
    public static void create(SubTipoMaterial subTipoMateria) {
        subTipoMaterialJpaController.create(subTipoMateria);
    }

    public static void modificar(SubTipoMaterial subTipoMateria) {
        try {
            subTipoMaterialJpaController.edit(subTipoMateria);
        } catch (Exception ex) {
            Logger.getLogger(MaterialRN.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static List<SubTipoMaterial> getTodosSubTipoMateriaes() {
        return subTipoMaterialJpaController.findSubTipoMaterialEntities();
    }

    public static SubTipoMaterial getSubTipoMateriaXId(Long id) {
        return subTipoMaterialJpaController.findSubTipoMaterial(id);
    }
    
    public static List<SubTipoMaterial> getSubTipoMaterialPorTipoMaterial(Long id){
        return materialJpaControllerExt.getSubTipoMaterialPorTipoMaterial(id);
    }
    
    public static boolean yaExisteSubTipoMaterial(String value, Long id_excepcion){
        return materialJpaControllerExt.yaExisteSubTipoMaterial(value, id_excepcion);
    }
    
    public static void eliminarSubTipoMaterial(Long id){
        try {
            subTipoMaterialJpaController.destroy(id);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(MaterialRN.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //UnidadMedida
    public static void create(UnidadMedida unidadMedida) {
        unidadMedidaJpaController.create(unidadMedida);
    }

    public static void modificar(UnidadMedida unidadMedida) {
        try {
            unidadMedidaJpaController.edit(unidadMedida);
        } catch (Exception ex) {
            Logger.getLogger(MaterialRN.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static List<UnidadMedida> getTodosUnidadMedidaes() {
        return unidadMedidaJpaController.findUnidadMedidaEntities();
    }

    public static UnidadMedida getUnidadMedidaXId(Long id) {
        return unidadMedidaJpaController.findUnidadMedida(id);
    }
    
    public static boolean yaExisteUnidadMedida(String value, Long id_excepcion){
        return materialJpaControllerExt.yaExisteUnidadMedida(value, id_excepcion);
    }
    
    //Ingreso de Materiales
    public static void newIngresoMaterial(IngresoMaterial ingreso){
        ingresoMaterialJpaController.create(ingreso);
    }
    
    public static void newLoteIngresoMaterial(LoteIngresoMaterial lote){
        loteIngresoMaterialJpaController.create(lote);
    }
    
    
    //Lote de ingreso
     public static Long getUltimoLoteDeIngresoDeMateriales() {
         return materialJpaControllerExt.getUltimoLoteDeIngresoDeMateriales();
     }
}
